
var geocoder;
var map;
var marker;

$(document).ready(function() { 
    
    $listeSite();      
    initialize();
       
    $("#addr").autocomplete({
        //This bit uses the geocoder to fetch address values
        source: function(request, response) {
            geocoder.geocode( {
                'address': request.term
            }, function(results, status) {
                response($.map(results, function(item) {
                    return {
                        label: item.formatted_address,
                        value: item.formatted_address,
                        latitude: item.geometry.location.lat(),
                        longitude: item.geometry.location.lng()
                    }
                }));
            })
        },
            
        //This bit is executed upon selection of an address
        select: function(event, ui) {
            $("#lat").val(ui.item.latitude);
            $("#long").val(ui.item.longitude);
            var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude); // On crée un marqueur    
            //marker.setPosition(location);
            geolocalisation();
        }
    });
 
    //Add listener to marker for reverse geocoding
    google.maps.event.addListener(marker, 'drag', function() {
        geocoder.geocode({
            'latLng': marker.getPosition()
        }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                    $('#addr').val(results[0].formatted_address);
                    $('#lat').val(marker.getPosition().lat());
                    $('#long').val(marker.getPosition().lng());
                // Centre la carte après déplacement du curseur
                // var location = new google.maps.LatLng(marker.getPosition().lat(), marker.getPosition().lng());
                // map.setCenter(location);
                }
            }
        });
    });
  
    //Fonction lors de la soumission du formulaire
    $("#search_frm").submit(function(){
        if( $("#addr").val()==""){
            alert("Veuillez sélectionner un lieu")
        }else{
            geolocalisation();
        }
        return false;
    });
    
    //Fonction de clic sur un lien de site
    $('.site').live('click', function(){
        $("#addr").val($(this).attr("title"));
        geolocalisation();
        return false;
    });  
      
    
    // Fonction de click sur un bouton supprimer
    $(".supprimer").live('click', function(){
        
        //Recuperation de l'id du site'
        var $id=$(this).parent().parent().attr("id");

        //Fenêtre de confirmation de suppression du site
        if(confirm('Etes vous sur de vouloir définitivement supprimer ce site?')){
            
            // Envoi des parametres au fichier gestionSite.php qui va supprimer le site dans la base
            $.ajax({
                type: 'POST',
                url: 'gestionSite.php', 
                data:"action=supprimerSite&id="+$id,           
                success: function(data, textStatus, jqXHR) {
                    alert(data);
                },
                error: function(jqXHR, textStatus, errorThrown) {      
                }
            });
            
            //Suppression du lien du site supprimé sur la page
            $(this).parent().parent().remove();
        }    
        return false;
    });  
    
    // Fonction de redimentionnement de la zone de texte adresse
    $('#addr').keyup(function () {
        var oneLetterWidth = 10;
        var minCharacters = 5;
        var len = $(this).val().length;        
        if (len > minCharacters) {
            $(this).width(len * oneLetterWidth);
        } else {
            $(this).width(50);
        }
    });
    
});

/*
 * Fonction qui initialise les différents éléments google map
 */
function initialize(){

    //MAP
    var latlng = new google.maps.LatLng(46.060,2.71);
    var options = {
        zoom: 5,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.SATELLITE
    };
        
    map = new google.maps.Map(document.getElementById("map_canvas"), options);
        
    //GEOCODER
    geocoder = new google.maps.Geocoder();
        
    marker = new google.maps.Marker({
        map: map,
        draggable: true
    });
    
    marker.setPosition(latlng);
    
    return false;
}

/*
 * Fonction qui permet de recentrer la carte et le marker aprés une modification
 * du lieu
 */
function geolocalisation(){

    geocoder.geocode({
        "address":document.getElementById("addr").value
    }, function(data, status){
    
        if (status == google.maps.GeocoderStatus.OK) {
   
            document.getElementById("addr").value=data[0].formatted_address;
            
            var point=data[0].geometry.location;
            
            var decimals = 8;   // arrondi des coordonnées
            var b=Math.pow(10,decimals);
            document.getElementById("lat").value=Math.round(point.lat()*b)/b;
            document.getElementById("long").value=Math.round(point.lng()*b)/b;
            map.setCenter(point);
            map.setZoom(14);
            marker.setPosition(point);
            
        } else {
            alert("Erreur: "+status);
        }
    });
}

/*
 * Fonction qui permet d'ajouter un site à la liste
 */   
function $ajoutSite(){

    var $idSite;
    var $addr=$("#addr").val();
    var $lat=$("#lat").val();
    var $long=$("#long").val();
    
    //Verification qu'un lieu a bien été renseigné'
    if($('#addr').val()==""){
        alert("Veuillez sélectionner un lieu");
    }
    else{
        // Envoi des parametres au fichier gestionSite.php qui va ajouter le site dans la base

        $.ajax({
            type: 'POST',
            url: 'gestionSite.php',
            data:"action=ajouterSite&adresse="+$addr+"&latitude="+$lat+"&longitude="+$long,
            success: function (data, textStatus, jqXHR) {
                $idSite=data;
                $('#table_site').append("<tr class='infoSite' id="+$idSite+"><td><a href='' class='site' title='" +$addr+ "'>" +$addr+ "</a></td><td><a href='index.php?adresse=" +$addr+ "&id=" +$idSite+ "&lat=" +$lat+ "&long=" +$long+ "'><img src='images/icn_edit.png' alt='modifier'/></a><a href='#' class='supprimer'><img src='images/icn_trash.png' alt='supprimer'/></a></td></tr>");                                                  
                document.location.href = "index.php?adresse="+$addr+"&id=" +$idSite+"&lat=" +$lat+"&long=" +$long; 
            },
            error: function(jqXHR, textStatus, errorThrown) {
            }
        });
    }
    return false;
}

/*
 * Fonction qui permet d'afficher la liste de tous les sites de la base de données
 */ 

function $listeSite(){
    
    //Requete ajax permettant de recuperer les points de la base de données
    $.ajax({
        type: 'POST',
        url: 'gestionSite.php',
        data:"action=listeSite",
        dataType:'json',
        success: function(data, textStatus, jqXHR) {
            $.each(data, function(key, val) {
                //Ajout des points à la liste
                $('#table_site').append("<tr class='infoSite' id="+val.idSite+"><td><a href='' class='site' title='" +val.nomSite+ "'>" +val.nomSite+ "</a></td><td><a href='index.php?adresse=" +val.nomSite+ "&id=" +val.idSite+ "&lat=" +val.latitude+ "&long=" +val.longitude+ "'><img src='images/icn_edit.png' alt='modifier'/></a><a href='#' class='supprimer'><img src='images/icn_trash.png' alt='supprimer'/></a></td></tr>");    
            });
        },
        error: function(jqXHR, textStatus, errorThrown) {
        }
    });   
    return false;
}
/*
 * Reverse geocoding
 */
//    document.getElementById("reverse_frm").onsubmit=function(){
//        var point = new google.maps.LatLng(document.getElementById("lat").value, document.getElementById("lng").value);
//        geocoder.geocode({
//            "latLng": point
//        }, function(data, status) {
//            if (status == google.maps.GeocoderStatus.OK && data[0]) {
//                document.getElementById("addr").value=data[0].formatted_address;              
//                refreshMap(point);
//            } else {
//                alert("Erreur: " + status);
//            }
//        });
//        return false;
//    } 
//} 

    //    //Add listener to marker for reverse geocoding
    //    
    //    $geocoder.geocode({
    //        'latLng': marker.getPosition()
    //    }, function(results, status) {
    //        if (status == google.maps.GeocoderStatus.OK) {
    //            if (results[0]) {
    //                $('#addr').val(results[0].formatted_address);
    //                $('#lat').val(marker.getPosition().lat());
    //                $('#long').val(marker.getPosition().lng());
    //            }
    //        }
    //    });
    // 
    //}
    //
   